home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / wais / waisgate / DCLServer.c < prev    next >
C/C++ Source or Header  |  1995-05-09  |  3KB  |  121 lines

  1. /*        Handle a request from a WWW client    DCLServer.c
  2. **        ==================================
  3. **
  4. ** Authors
  5. **    JFG    Jean-Francois Groff, CERN, Geneva    jfg@info.cern.ch
  6. **      TBL    Tim Berners-Lee CERN                    tbl@info.cern.ch
  7. **      JS      Jonathan Streets, FNAL                  streets@fnal.fnal.gov
  8. **
  9. ** History:
  10. **
  11. ** 1.0   9 Jul 92 (TBL, JS) DocDB gateway hacked from VMSHelp gateway
  12. **
  13. ** 0.3    27 Sep 91 (JFG)    VMSHelp gateway created from h2h.c
  14. **
  15. */
  16.  
  17. /* (c) CERN WorldWideWeb project 1990-1992. See Copyright.html for details */
  18. /* and FNAl etc etc */
  19.  
  20. /* This is the DCL command which will be used
  21. */
  22. #define DCL_COMMAND "@docdbgate"
  23.  
  24. /** Headers taken from HTRetrieve.c **/
  25.  
  26. #define BUFFER_SIZE 4096    /* Arbitrary size for efficiency */
  27.  
  28. #include "HTUtils.h"
  29. #include "tcp.h"
  30.  
  31. extern int WWW_TraceFlag;    /* Control diagnostic output */
  32. extern FILE * LogFile;        /* Log file output */
  33. extern char HTClientHost[16];    /* Client name to be output */
  34. extern int HTWriteASCII(int soc, char * s);    /* In HTDaemon.c */
  35.  
  36.  
  37. /** Headers taken from h2h.c **/
  38.  
  39. /* Maximum line size for buffers */
  40. #define LSIZE 256
  41.  
  42. /* Maximum command line size for VMS */
  43. #define CSIZE 256
  44.  
  45. /* Maximum VMS file name size (on 5.3, it's really 41, yuk! hope for more) */
  46. #define FSIZE 80
  47.  
  48.  
  49.  
  50. /******************************************************************************
  51.  
  52. HTRetrieve : Retrieves information for the W3 server by calling a DCL file
  53.  
  54. Inputs :
  55.     char *arg : HT address
  56.     char *keywords : plus-separated keyword list, if any
  57.     int soc : output socket
  58.  
  59. DCL file parameters:
  60.  
  61.       p1   The device name down which the result should be sent
  62.       p2   The document id requested
  63.       p3   The keywords requested if any, still + separated.
  64.  
  65.  
  66. -----------------------------------------------------------------------------*/
  67.  
  68. #include <dvidef.h>
  69.  
  70. int HTRetrieve
  71. #ifdef __STDC__
  72.   (const char *arg, const char *keywords, const int soc)
  73. #else
  74.   (arg, keywords, soc)
  75.     char *arg;
  76.     char *keywords;
  77.     int soc;
  78. #endif
  79. {
  80.   FILE *hlp;
  81.  
  82.   char *query;
  83.   char *s;
  84.   char command[1024];        /* bug */
  85. #define STRING_SIZE    65
  86.   char devname[STRING_SIZE];
  87.   struct {
  88.     int    size;
  89.     char*    string;
  90.     } desc_devname;
  91.   int status;
  92.   int length;
  93.   int item;
  94.  
  95. /*    First of all, we must get the device name of the socket
  96. **    to pass to the DCL coimmand file.
  97. */
  98.   desc_devname.string = &devname[0];
  99.   desc_devname.size = STRING_SIZE;
  100.   item = DVI$_DEVNAM;
  101.  
  102.   status=lib$getdvi(&item,&soc,0,0,&desc_devname,&length);
  103.   if (!(status&1)) 
  104.     lib$signal(status);
  105.  
  106.   desc_devname.string[length] = '\0';
  107.   if (TRACE) fprintf(stderr, "DCLServer: socket devname is %s \n",devname);
  108.  
  109. /*     Now we call the DCL file to do the work
  110. */
  111.   if (keywords) sprintf(command,
  112.      "%s \"%s\" \"%s\"  \"%s\" ", DCL_COMMAND, devname, arg, keywords);
  113.   else sprintf(command,
  114.      "%s \"%s\" \"%s\"", DCL_COMMAND, devname, arg);
  115.  
  116.   system(command);  /* ought to check return code @@@ */
  117.  
  118.   return 0;     /* OK */
  119.  
  120. }
  121.